package com.hbnu.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hbnu.system.model.dto.CheckBackDTO;
import com.hbnu.system.model.dto.ReportAddDTO;
import com.hbnu.system.model.dto.SearchPageDTO;
import com.hbnu.system.model.dto.UserDTO;
import com.hbnu.system.model.entity.Report;
import com.hbnu.system.model.vo.ReportVO;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ${author}
 * @since 2023-05-16
 */
public interface IReportService extends IService<Report> {
    /**
     * 新增报告
     *
     * @param report
     * @return 是否成功
     */
    boolean addReport(Report report);

    /**
     * 新增报告
     *
     * @param reportAddDTO
     * @return 是否成功
     */
    boolean addReport(ReportAddDTO reportAddDTO);


    /**
     * 删除报告
     */
    boolean deleteReport(String id);
    /**
     * 修改报告
     *
     * @param report
     * @return 是否成功
     */
    boolean updateReport(Report report);

    /**
     * 报告VO分页查看
     */

    /**
     * 根据报告主键查询报告
     *
     * @param ReportID
     * @return Paper
     */
    Report getReport(String ReportID);

    /**
     * 报告名称查重
     *
     * @param reportname
     * @return 是否重复
     */
    boolean checkReportName(String reportname);


    /**
     * 分页查询
     */
    IPage<Report> pageCondition(SearchPageDTO searchPageDTO);

    /**
     * 通过id获得reportvo
     */
    ReportVO getReportVO(String id);

    /**
     * 院级审核通过
     */
    Boolean collegeCheckPass(String token,String PID);

    /**
     * 院级审核打回
     */
    Boolean collegeCheckBack(String token,CheckBackDTO checkBackDTO);

    /**
     * 校级审核通过
     */
    Boolean schoolCheckPass(String token,String PID);

    /**
     * 校级审核打回
     */
    Boolean schoolCheckBack(String token,CheckBackDTO checkBackDTO);

    /**
     * 报告再度提交
     */
    Boolean ReCommitReport(String id);
    
    /**
     * 报告撤回
     * 只有在院级审核状态才能撤回，撤回后状态变为草稿
     */
    Boolean withdrawReport(String id);

    /**
     * 普通用户分页查看与自己相关的报告
     */
    IPage<Report> userGetRelateReport(UserDTO userDTO);

    /***
     * 提供合计数据
     *
     */
    float[] getFigure(UserDTO userDTO);

    /**
     * 院级管理员查看需要自己审核的报告
     */
    IPage<Report> collegeUserGetReport(UserDTO userDTO);

    /**
     * 校级管理员查看需要自己审核的报告
     */
    IPage<Report> schoolUserGetReport(UserDTO userDTO);
}
